<?php

namespace app\admin\controller;

use think\Controller;
use think\Db;

class Test extends Controller
{
    public function index()
    {
//        2.1. 快捷查询
//        $row = Db::name('user')
////            ->where('id',5)
////            ->where('id','<=', 5)
//            ->where('id','in',[1,3,5,9,99])
//            ->select();
//        $row = Db::name('user')
//            ->where('age','>',18)
//            ->where(['province'=>'上海'])
//            ->select();
//        $row = Db::name('user')
//            ->where('age','<',18)
//            ->where('name','like','%王%')
//            ->select();

//        $row = Db::name('user')
//            ->where('age','>',18)
//            ->whereOr(['province'=>'上海'])
//            ->select();

//        2.2. 批量查询
//        $row = Db::name('user')
//            ->where([
//                'id'=> ['between', '10,20'],
//                'sex'=> ['eq','0']
//            ])->select();

//        $row = Db::name('user')
//            ->where('sex','eq','0')
//            ->where('id', ['between', '1,3'], ['in',[6,66,666]], 'or')
//            ->select();

//        2.3. 区间查询
//        $row = Db::name('user')
//            ->where('id', ['>', 2], ['<', 12])
//            ->select();

//        2.4. 多表查询
//            1). 手动多表
//        $row = Db::field('u.name uname, l.name lname')
//            ->table(['user'=>'u','lover'=>'l'])
//            ->where('u.id = l.user_id')
//            ->select();

//            2). JOIN
//        $row = Db::table('user')
//            ->alias('u')
//            ->field(['u.name'=>'uname', 'l.name'=>'lname'])
//            ->join('lover l', 'u.id=l.user_id')
//            ->order('uname')
//            ->select();

//            3). 视图
//        $row = Db::view('user', ['name'=>'uname'])
//            ->view('lover', ['name'=>'lname'], 'user.id=lover.user_id')
//            ->select();

//        2.5. 聚合查询
//        $row = Db::table('user')->avg('age');

//        $row = Db::table('user')
//            ->field('province, count(id)')
//            ->group('province')
//            ->select();

//        $row = Db::table('user')
//            ->field('province, group_concat(name)')
//            ->group('province')
//            ->select();

//        2.6. 子查询
//  1.fetchSql 方式
//        1). 构建子查询SQL
//        $query = Db::table('hc_user')
//            ->field('id,name,sex,age')
//            ->where('sex','eq','0')
//            ->fetchSql(true)
//            ->select();
//        var_dump($query);
//        2). 组装完整的SQL
//        $row = Db::table('('.$query.') u')
//            ->where('u.age','gt','18')
//            ->order('u.id', 'desc')
//            ->select();
//  2.buildSql 方式
//        1). 构建子查询SQL
        $query = Db::table('hc_user')
            ->field('id,name,sex,age')
            ->where('sex','eq','0')
            ->buildSql();
//        var_dump($query);
//        2). 组装完整的SQL
        $row = Db::table($query.' u')
            ->where('u.age','gt','18')
            ->order('u.id', 'asc')
            ->select();

        var_dump($row);
    }


    public function sw()
    {
        // 自动档
//        Db::transaction(function(){
//            // 准备数据
//            $userdata = ['name'=>'老大', 'age'=>'35','sex'=>'1'];
//            $id = Db::table('user')->insertGetId($userdata);
//            var_dump('用户ID: ' . $id);
//
//            $loverdata = ['name'=>'百合', 'sex'=>'0','user_id'=>$id];
//            Db::table('lover')->insert($loverdata);
//
//            echo ' 关系建立完成';
//        });
        // 手动档
        Db::startTrans();
        try{
            // 准备数据
            $userdata = ['name'=>'老三', 'age'=>'30','sex'=>'0'];
            $id = Db::table('user')->insertGetId($userdata);
            var_dump('用户ID: ' . $id);

            $loverdata = ['name'=>'陆亮', 'sex'=>'1','user_id'=>$id];
            Db::table('lover')->insert($loverdata);
            // 提交事务
            Db::commit();
            echo '关系建立完成';
        } catch (\Exception $e) {
            echo '关系破裂了';
            // 回滚事务
            Db::rollback();
        }
    }
}
